[IA64] init the hlt timer on a valid cpu and migrate
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 29 Aug 2006 14:09:28 +0000 (08:09 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 29 Aug 2006 14:09:28 +0000 (08:09 -0600)
Based on a patch from Anthony Xu, v->processor is not initialized
in alloc_vcpu_struct() when we initialize the hlt_timer.  Init the
timer on the first cpu and migrate it in schedule_tail().

Signed-off-by: Alex Williamson <alex.williamson@hp.com>
xen/arch/ia64/xen/domain.c

index 0fadeffad0fbc8a6404978c85ad0f7fa2c368a12..719af71ff27206c431cb34fe9e103793084c26c5 100644 (file)
@@ -122,6 +122,7 @@ void schedule_tail(struct vcpu *prev)
                  shared_info->vcpu_info[current->vcpu_id].evtchn_upcall_mask;
                __ia64_per_cpu_var(current_psr_ic_addr) = (int *)
                  (current->domain->arch.shared_info_va + XSI_PSR_IC_OFS);
+               migrate_timer(&current->arch.hlt_timer, current->processor);
        }
        flush_vtlb_for_context_switch(current);
 }
@@ -305,7 +306,8 @@ struct vcpu *alloc_vcpu_struct(struct domain *d, unsigned int vcpu_id)
            v->arch.last_processor = INVALID_PROCESSOR;
        }
        if (!VMX_DOMAIN(v)){
-               init_timer(&v->arch.hlt_timer, hlt_timer_fn, v, v->processor);
+               init_timer(&v->arch.hlt_timer, hlt_timer_fn, v,
+                          first_cpu(cpu_online_map));
        }
 
        return v;